﻿/****************************************************************************
 * 工    具：  HK_BuildInfoSystem
 *
 * 描    述：  HK_BuildInfoSystem 是一个构建信息管理工具，用于在构建时自动收集项目信息并在运行时查看。
 *            主要功能如下：
 *            自动收集公司名称、产品名称、版本号、构建时间和平台信息
 *            支持自定义文本信息的添加和显示
 *            通过F12键切换信息显示状态
 *            自适应不同屏幕分辨率的UI显示
 *
 *            使用方法：  
 *             1. 在Unity编辑器中通过菜单栏 HKTools > Build Info Editor 打开编辑器窗口（可选）
 *             2. 在窗口中输入需要添加的自定义信息并保存（可选）
 *             3. 正常进行项目构建（构建过程中会自动生成BuildInfo.json）
 *             4. 运行时按F12键可查看包含自定义信息在内的所有构建信息
 *
 * 版    本：  V1.0
 * 作    者：  京产肠饭
 * 
 * 创    建：  2025/10/24  V1.0
 * 
 * 链    接：  https://gitee.com/JingChanChangFan/hk_-unity-tools
*****************************************************************************/

using QFramework;
using UnityEngine;

namespace HKTools
{
    [System.Serializable]
    public class BuildInfo
    {
        public string companyName;
        public string productName;
        public string version;
        public string buildTime;
        public string platform;
        public string customInfo;
    }

    public interface IHK_BuildInfoSystem : ISystem
    {

    }

    public class HK_BuildInfoSystem : AbstractSystem, IHK_BuildInfoSystem
    {
        BuildInfo buildInfo;
        bool isShowInfo = false;

        // 创建新的GUIStyle
        GUIStyle scaledStyle = new GUIStyle();

        protected override void OnInit()
        {
            HKDebug.Log("IHK_BuildInfoSystem 初始化完成!", LogColor.Cyan, LogStyle.Bold);

            // 根据屏幕高度计算字体缩放因子，以1080p为基准
            float baseWidth = 1920f;
            float scaleFactor = Screen.width / baseWidth;
            // 确保字体不会太小
            scaleFactor = Mathf.Max(scaleFactor, 1f);

            // 创建新的GUIStyle
            scaledStyle = new GUIStyle();
            // 设置默认字体大小（防止fontSize为0的情况）
            int defaultFontSize = 14;
            scaledStyle.fontSize = Mathf.RoundToInt(defaultFontSize * scaleFactor);
            // 设置文本颜色为白色（确保在任何背景下都可见）
            scaledStyle.normal.textColor = Color.white;

            ActionKit.OnUpdate.Register(() =>
            {
                if (Input.GetKeyDown(KeyCode.F12))
                {
                    isShowInfo = !isShowInfo;

                    if (isShowInfo)
                    {
                        LoadBuildInfo();
                    }
                }
            });

            ActionKit.OnGUI.Register(() =>
            {
                if (isShowInfo && buildInfo != null)
                {
                    // 使用缩放后的样式显示标签
                    GUILayout.Label("Company: " + buildInfo.companyName, scaledStyle);
                    GUILayout.Label("Product: " + buildInfo.productName, scaledStyle);
                    GUILayout.Label("Version: " + buildInfo.version, scaledStyle);
                    GUILayout.Label("Build Time: " + buildInfo.buildTime, scaledStyle);
                    GUILayout.Label("Platform: " + buildInfo.platform, scaledStyle);
                    GUILayout.Label("Custom Info: " + buildInfo.customInfo, scaledStyle);
                }
            });
        }

        void LoadBuildInfo()
        {
            TextAsset textAsset = Resources.Load<TextAsset>("BuildInfo");

            if (textAsset != null)
            {
                buildInfo = JsonUtility.FromJson<BuildInfo>(textAsset.text);
            }
            else
            {
                Debug.LogWarning("当前没有生成BuildInfo.json文件!");
                buildInfo = new BuildInfo
                {
                    companyName = "Unknown",
                    productName = "Unknown",
                    version = "Unknown",
                    buildTime = "Unknown",
                    customInfo = "Unknown",
                    platform = Application.platform.ToString()
                };
            }
        }
    }
}